package com.baturu.vin.hyundai.dto;

import com.alibaba.fastjson.JSON;
import com.baturu.vin.base.dto.BaseVinAnalyseResultDTO;
import com.baturu.vin.dto.superEPC.SEPCCarTypeDetailDTO;
import com.baturu.vin.hyundai.constant.HyundaiKiaCommonConstant;
import com.baturu.vin.hyundai.dal.entity.HyundaiKiaFeatureEntity;
import com.google.common.collect.Lists;
import lombok.*;
import lombok.experimental.FieldDefaults;
import org.apache.commons.lang3.StringUtils;

import java.io.Serializable;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@EqualsAndHashCode(callSuper = true)
@Data
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
@Builder
public class HyundaiKiaVehicleDTO extends BaseVinAnalyseResultDTO implements Serializable {

    /**
     * 是否倚天解析
     */
    boolean yiTianAnalysis;
    /**
     * 地区编号
     */
    private String areaNum;
    /**
     * 车型编号
     */
    private String micd;
    /**
     * 版本号
     */
    private String ocn;
    /**
     * 版本子号
     */
    private String ver;
    /**
     * 车型年
     */
    private String carTypeYear;

    /**
     * 版本号
     */
    String version;

    /**
     * vin码
     */
    String vinCode;

    /**
     * 巴图鲁车型标识
     */
    String btrId;

    // 来自vinList、vinCheck

    /**
     * 等级
     */
    String level;

    /**
     * 车系
     */
    String carSystem;

    /**
     * 品牌
     */
    public String getBrandName() {
        switch (level) {
            case "H":
                return "hyundai";
            case "K":
                return "kia";
            default:
                return "";
        }
    }

    /**
     * 出厂日期
     */
    String makeDate;

    /**
     * 出厂年份
     */
    public int getMakeYear() {
        return Integer.parseInt(makeDate.substring(0, 4));
    }

    /**
     * 配件目录号
     */
    String bpno;
    /**
     * 车型
     */
    String model;

    // 来自vinInfo[0]

    /**
     * 引擎编码
     */
    String engineCode;
    /**
     * 波箱编码
     */
    String transmissionCode;
    /**
     * 开始时间
     */
    String startDate;
    /**
     * 结束时间
     */
    String endDate;
    /**
     * 国家信息
     */
    String country;
    /**
     * 内饰编号
     */
    String interiorCode;
    /**
     * 内饰描述
     */
    String interiorDesc;
    /**
     * 外饰描述
     */
    String exteriorCode;
    /**
     * 外饰描述
     */
    String exteriorDesc;
    /**
     * 基本信息描述所有内容，Json字段
     */
    String basicAllDesc;

    /**
     * option
     * model code:message
     */
    Map<String,String> optionMap;

    /**
     * 特殊描述信息中数字排列项目
     */
    public List<String> getBasicAllDescJson() {
        if (StringUtils.isBlank(this.basicAllDesc)) {
            return Collections.emptyList();
        }
        return JSON.parseArray(basicAllDesc, String.class);
    }

    // 来自vinInfo[1]

    /**
     * 驾驶位置编码
     */
    String drivePosCode;
    /**
     * 销售区域编码
     */
    String sellAreaCode;
    /**
     * 关键属性组合
     */
    String combination;
    /**
     * 特殊描述信息中数字排列项目，Json字段
     */
    String majorAttributes;

    /**
     *通过v2的配件方式(按vin爬取的配件)带出的配件
     */
    boolean accurate;

    /**
     * 特殊描述信息中 WT+DT+数字 项目
     */
    public List<HyundaiAttributeEntity> getMajorAttributeJson() {
        return StringUtils.isNoneBlank(this.majorAttributes) ? JSON.parseArray(majorAttributes, HyundaiAttributeEntity.class) : Collections.emptyList();
    }

    // 来自vinInfo[2]

    /**
     * 特征编号，Json字段
     */
    String featureCodes;

    /**
     * 特殊描述信息中数字排列项目
     */
    public List<HyundaiKiaFeatureEntity> getFeatureCodesJson() {
        if (StringUtils.isBlank(this.featureCodes)) {
            return Collections.emptyList();
        }
        return JSON.parseArray(featureCodes, HyundaiKiaFeatureEntity.class);
    }

    /**
     * vdsDTOS
     */
    private List<HyundaiVdsDTO> hyundaiVdsDtos;

    public String getChBrandName() {
        switch (level) {
            case "H":
                return "现代";
            case "K":
                return "起亚";
            default:
                return "";
        }
    }

    public String getDateByFormat() {
        if (makeDate.length() != 8) {
            return makeDate;
        }

        return makeDate.substring(0, 4) + "/" + makeDate.substring(4, 6) + "/" + makeDate.substring(6, 8);
    }

    public List<SEPCCarTypeDetailDTO> getVehicle() {
        List<SEPCCarTypeDetailDTO> sepcCarTypeDetailDTOS = getBaseInfo();
        List<HyundaiAttributeEntity> majorAttributeJson = getMajorAttributeJson();
        if (majorAttributeJson.size() < HyundaiKiaCommonConstant.MAJOR_ATTR_COUNT) {
            return sepcCarTypeDetailDTOS;
        }
        sepcCarTypeDetailDTOS.addAll(getSEPCMajor(majorAttributeJson));
        return sepcCarTypeDetailDTOS;
    }

    private List<SEPCCarTypeDetailDTO> getSEPCMajor(List<HyundaiAttributeEntity> majorAttributeJson) {
        return Lists.newArrayList(
                SEPCCarTypeDetailDTO.builder().desc("驱动类型").value(majorAttributeJson.get(0).getDescribe()).build(),
                SEPCCarTypeDetailDTO.builder().desc("环境类型").value(majorAttributeJson.get(1).getDescribe()).build(),
                SEPCCarTypeDetailDTO.builder().desc("车身类型").value(majorAttributeJson.get(2).getDescribe()).build(),
                SEPCCarTypeDetailDTO.builder().desc("发动机容量").value(majorAttributeJson.get(3).getDescribe()).build(),
                SEPCCarTypeDetailDTO.builder().desc("发动机类型").value(majorAttributeJson.get(4).getDescribe()).build(),
                SEPCCarTypeDetailDTO.builder().desc("燃油类型").value(majorAttributeJson.get(5).getDescribe()).build(),
                SEPCCarTypeDetailDTO.builder().desc("变速差速器").value(majorAttributeJson.get(6).getDescribe()).build()
        );
    }

    private List<SEPCCarTypeDetailDTO> getBaseInfo() {
        return Lists.newArrayList(
                SEPCCarTypeDetailDTO.builder().desc("型号代码").value(vinCode).build(),
                SEPCCarTypeDetailDTO.builder().desc("配件目录").value(bpno).build(),
                SEPCCarTypeDetailDTO.builder().desc("国家").value(country).build(),
                SEPCCarTypeDetailDTO.builder().desc("车型").value(model).build(),
                SEPCCarTypeDetailDTO.builder().desc("生成日期").value(getDateByFormat()).build());
    }

    public List<SEPCCarTypeDetailDTO> getColor() {
        return Lists.newArrayList(
                SEPCCarTypeDetailDTO.builder().desc("车内颜色").value(interiorCode+"("+interiorDesc+")").build(),
                SEPCCarTypeDetailDTO.builder().desc("车外颜色").value(exteriorCode+"("+exteriorDesc+")").build()
        );
    }

    public List<SEPCCarTypeDetailDTO> getOption() {
        List<HyundaiKiaFeatureEntity> featureCodesJson = getFeatureCodesJson();
        return featureCodesJson.stream()
                .map(d->SEPCCarTypeDetailDTO.builder()
                        .desc(d.getModel()+" "+d.getCode())
                        .value(optionMap.getOrDefault(d.getModel()+" "+d.getCode(),"")).build())
                .collect(Collectors.toList());
    }

    public boolean getAnalysisFlag(){
        return yiTianAnalysis;
    }

    public boolean getAccurateFlag(){
        return accurate;
    }
}